package com.xinyue.game.utils;

import java.nio.charset.StandardCharsets;

import org.apache.commons.lang3.StringUtils;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.PooledByteBufAllocator;

/**
 * @author 王广帅
 * @since 2023/6/28 20:06
 **/
public class ByteBufUtil {

    public static String readString(int size, ByteBuf byteBuf) {
        String msg = null;
        if (byteBuf.isReadable()) {
            byte[] bytes = new byte[size];
            byteBuf.readBytes(bytes);
            msg = new String(bytes, StandardCharsets.UTF_8);
        }
        return msg;
    }

    public static String readString(ByteBuf byteBuf) {
        String msg = null;
        if (byteBuf.isReadable()) {
            int len = byteBuf.readInt();
            byte[] bytes = new byte[len];
            byteBuf.readBytes(bytes);
            msg = new String(bytes, StandardCharsets.UTF_8);
        }
        return msg;
    }

    public static ByteBuf createResponse(int messageId, int code) {
        return createResponse(messageId, code, null);
    }

    public static ByteBuf createResponse(int messageId, int code, String msg) {
        byte[] bytes = null;
        if (!StringUtils.isEmpty(msg)) {
            bytes = msg.getBytes(StandardCharsets.UTF_8);
        }
        int len = 12;
        if (bytes != null) {
            len += bytes.length;
        }
        ByteBuf byteBuf = PooledByteBufAllocator.DEFAULT.buffer(len);
        byteBuf.writeInt(messageId);
        byteBuf.writeInt(code);
        if (bytes != null) {
            byteBuf.writeInt(bytes.length);
            byteBuf.writeBytes(bytes);
        }
        return byteBuf;
    }
}
